module.exports = function (grunt) {
    grunt.initConfig({
        htmlhint: {
            options: {
                htmlhintrc: ".htmlhintrc"
            },
            src: ["./GruntTest/src/page/*.html"]
        },
        csslint: {
            options: {
                csslintrc: ".csslintrc"
            },
            src: ["./GruntTest/src/css/*.css"]
        },
        cssmin: {
            target: {
                files: [{
                    expand: true,
                    cwd: "./GruntTest/src/css/",
                    src: ["*.css", "!*.min.css"],
                    dest: "./GruntTest/dist/css/",
                    ext: ".min.css"
                }]
            }
        },
        less: {
            compile: {
                files: [{
                    expand: true,
                    cwd: "./GruntTest/src/less/", // less目录下
                    src: ["*.less"], // 所有less文件
                    dest: "./GruntTest/dist/less/", // 输出到此目录下
                    ext: ".css"
                }]
            }
        },
        sass: {
            compile: {
                files: [{
                    expand: true,
                    cwd: "./GruntTest/src/sass/", // sass目录下
                    src: ["*.scss"], // 所有sass文件
                    dest: "./GruntTest/dist/sass/", // 输出到此目录下
                    ext: ".css"
                }]
            }
        },
        htmlmin: {
            options: {
                collapseWhitespace: true,
                // 折叠空格
                removeComments: true
                // 删除注释
            },
            files: {
                expand: true,
                cwd: "./GruntTest/src/page/", // 目标文件目录下
                src: ["*.html"], // 所有html文件
                dest: "./GruntTest/dist/page/" // 输出到此目录下
                // 输出的目标地址
            }
        },
        eslint: {
            options: {
                configFile: "./.eslintrc.json"
                // 指定配置文件
            },
            build: [
                "./Gruntfile.js",
                "./GruntTest/src/js/*.js"
            ]
        },
        babel: {
            options: {
                sourceMap: false,
                presets: ["@babel/preset-env"]
            },
            dist: {
                files: [{
                    expand: true,
                    cwd: "./GruntTest/src/js/", // js目录下
                    src: ["*.js"], // 所有js文件
                    dest: "./GruntTest/dist/js/" // 输出到此目录下
                }]
            }
        },
        concat: {
            options: {
                separator: ";"
                // 连接符";"
            },
            dist: {
                src: [
                    "./GruntTest/dist/js/*.js"
                ],
                dest: "./GruntTest/dist/js/build.js"
                // 合并的js文件名叫build.js
            }
        },
        pkg: grunt.file.readJSON("package.json"),
        uglify: {
            options: {
                banner: "/*! <%= pkg.name %> - v<%= pkg.version %> - " +
                    '<%= grunt.template.today("yyyy-mm-dd") %> */'
            },
            build: {
                files: [{
                    expand: true,
                    cwd: "./GruntTest/dist/js/", // js目录下
                    src: ["build.js", "!*.min.build.js"], // 所有js文件
                    dest: "./GruntTest/dist/js/", // 输出到此目录下
                    ext: ".min.js"
                }]
            }
        },
        clean: {
            contents: [
                "./GruntTest/dist/page/*",
                "./GruntTest/dist/js/*",
                "./GruntTest/dist/css/*",
                "./GruntTest/dist/less/*",
                "./GruntTest/dist/sass/*"
            ]
        },
        // watch自动化
        watch: {
            build: {
                files: [
                    "./GruntTest/src/page/*.html",
                    "./GruntTest/src/js/*.js",
                    "./GruntTest/src/less/*.less",
                    "./GruntTest/src/sass/*.scss"
                ],
                tasks: ["htmlhint", "eslint", "csslint", "concat", "cssmin", "uglify"],
                options: { spawn: false }
            }
        }

    });
    grunt.loadNpmTasks("grunt-contrib-clean");
    grunt.loadNpmTasks("grunt-htmlhint");
    // html语法检测
    grunt.loadNpmTasks("grunt-contrib-csslint");
    // css语法检测
    grunt.loadNpmTasks("grunt-contrib-cssmin");
    // 压缩css代码
    grunt.loadNpmTasks("grunt-contrib-less");
    // less转化css
    grunt.loadNpmTasks("grunt-contrib-sass");
    // sass转化css
    grunt.loadNpmTasks("grunt-contrib-htmlmin");
    // html代码压缩
    grunt.loadNpmTasks("grunt-eslint");
    // js语法检查
    grunt.loadNpmTasks("grunt-babel");
    // babel转化es5
    grunt.loadNpmTasks("grunt-contrib-concat");
    // 合并文件
    grunt.loadNpmTasks("grunt-contrib-uglify");
    // 压缩js代码
    grunt.loadNpmTasks("grunt-contrib-watch");
    // 监听代码
    grunt.registerTask("default", [
        "clean",
        "less",
        "sass",
        "htmlhint",
        "csslint",
        "cssmin",
        "htmlmin",
        "babel",
        "concat",
        "uglify",
        "eslint",
        // 去掉了js语法检查,这里存在问题。
        "watch"
    ]);
    // 默认被执行的任务列表。
};
